package com.hsnn.medstgmini.pro.project.service.impl;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.Timestamp;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import com.hsnn.medstgmini.Constants;
import com.hsnn.medstgmini.base.std.dao.StdCompinfoDao;
import com.hsnn.medstgmini.base.std.dao.StdDrugInfoDao;
import com.hsnn.medstgmini.base.std.service.StdDrugQualitySpecManager;
import com.hsnn.medstgmini.exception.MSException;
import com.hsnn.medstgmini.model.Status;
import com.hsnn.medstgmini.pro.base.model.form.FileUploadResult;
import com.hsnn.medstgmini.pro.plan.model.ProjcetType;
import com.hsnn.medstgmini.pro.project.dao.BidProjectDao;
import com.hsnn.medstgmini.pro.project.model.BidProjCompany;
import com.hsnn.medstgmini.pro.project.model.BidProjdrugs;
import com.hsnn.medstgmini.pro.project.model.BidProject;
import com.hsnn.medstgmini.pro.project.model.BidProjectDetails;
import com.hsnn.medstgmini.pro.project.model.BidProjhospital;
import com.hsnn.medstgmini.pro.project.model.BidPubSettings;
import com.hsnn.medstgmini.pro.project.model.form.BidProjectDetailLogForm;
import com.hsnn.medstgmini.pro.project.model.form.BidProjectForm;
import com.hsnn.medstgmini.pro.project.model.form.BidPurProjDrugsForm;
import com.hsnn.medstgmini.pro.project.service.BidProjectManager;
import com.hsnn.medstgmini.sys.model.SysImportFileInfo;
import com.hsnn.medstgmini.sys.model.SysUser;
import com.hsnn.medstgmini.sys.model.form.SysImportFileInfoForm;
import com.hsnn.medstgmini.sys.service.SysImportFileInfoManager;
import com.hsnn.medstgmini.util.BeanCopierUtils;
import com.hsnn.medstgmini.util.ConstantsUtil;
import com.hsnn.medstgmini.util.DateUtil;
import com.hsnn.medstgmini.util.DicSysUtil;
import com.hsnn.medstgmini.util.ExcelUtil;
import com.hsnn.medstgmini.util.Pagination;
import com.hsnn.medstgmini.util.ParseDate;
import com.hsnn.medstgmini.util.ParseNumber;

@Service("bidProjectManager")
public class BidProjectManagerImpl implements BidProjectManager {
	private static final Logger logger = LoggerFactory.getLogger(BidProjectManagerImpl.class);
	@Autowired
	private BidProjectDao bidProjectDao;
	
	@Autowired
	private StdDrugInfoDao stdDrugInfoDao;
	
	@Autowired
	private StdCompinfoDao stdCompInfoDao;
	
	@Autowired
	private SysImportFileInfoManager sfmanager;
	
	@Value("#{sysProp['system.uploadPath']}")
	private String uploadPath;
	@Value("#{sysProp['system.importDrugPath']}")
	private String importDrugPath;
	@Value("#{sysProp['system.importDrugResultPath']}")
	private String importDrugResultPath;
	@Autowired
	private StdDrugQualitySpecManager stdqulityManager;
	/**
	 * 
	 *@category 获取采购项目列表
	 *@author 邱磊
	 *@date 2015年6月11日 上午11:51:59
	 *@param page
	 *@return
	 */
	public Pagination getDataList(Pagination page){
		return bidProjectDao.getDataList(page);
	}
	/**
	 * 
	 *@category 获取采购项目列表
	 *@author 邱磊
	 *@date 2015年6月11日 上午11:51:59
	 *@param page
	 *@return
	 */
	@SuppressWarnings("unchecked")
	public Pagination getPurDataList(Pagination page){
		page = bidProjectDao.getPurDataList(page);
		page.setRows(formatProject((List<Map<String, Object>>) page.getRows()));
		return page;
	}
	
	
	/**
	 * 
	 *@category 获取有医疗机构申请采购计划的采购项目列表
	 *@author 单大伟
	 *@date 2015年6月11日 上午11:51:59
	 *@param page
	 *@return
	 */
	@SuppressWarnings("unchecked")
	public Pagination getProjWithPlanList(Pagination page){
		List<Map<String,Object>> list = (List<Map<String, Object>>) bidProjectDao.getProjWithPlanList(page).getRows();
		for(Map<String,Object> data : list){
			Object projCat = data.get("projCat");
			data.put("projCat", projCat==null?"":StringUtils.isBlank(projCat.toString())?"":ProjcetType.getName(Integer.parseInt(projCat.toString())));
			data.put("starttime", DateUtil.date((Timestamp)data.get("starttime")));
			data.put("endtime", DateUtil.date((Timestamp)data.get("endtime")));
		}
		page.setRows(list);
		return page;
	}
	
	private List<BidProjectForm> formatProject(List<?> list){
		List<BidProjectForm> flist = new ArrayList<BidProjectForm>();
		if (null != list && list.size() > 0){
			for (int i = 0; i < list.size(); i++ ){
				Map<String, Object> obj = (Map<String, Object>) list.get(i);
				BidProjectForm form = new BidProjectForm();
				form.setProjId(obj.get("proj_id")==null?"":obj.get("proj_id").toString());
				form.setProjCode(obj.get("proj_code")==null?"":obj.get("proj_code").toString());
				form.setName(obj.get("name")==null?"":obj.get("name").toString());
				form.setProjCat(obj.get("proj_cat")==null?"":DicSysUtil.getValueByClassCodeAndDicCode(Constants.PROJ_CAT, obj.get("proj_cat").toString()));
				form.setStatus(obj.get("status")==null?"":Status.getName(Integer.valueOf(obj.get("status").toString())));
				form.setCreateDatetime(obj.get("create_datetime")==null?"":ParseDate.parseShortFormat(ParseDate.fromShortFormat(obj.get("create_datetime").toString())));
				form.setStarttime(obj.get("starttime")==null?"":obj.get("starttime").toString().equals("")?"":ParseDate.parseShortFormat(ParseDate.fromShortFormat(obj.get("starttime").toString())));
				form.setEndtime(obj.get("endtime")==null?"":obj.get("endtime").toString().equals("")?"":ParseDate.parseShortFormat(ParseDate.fromShortFormat(obj.get("endtime").toString())));
				form.setHospCount(obj.get("hospcount")==null?"":obj.get("hospcount").toString());
				form.setDrugCount(obj.get("drugcount")==null?"":obj.get("drugcount").toString());
				form.setDelCompCount(obj.get("delCompCount")==null?"":obj.get("delCompCount").toString());
				flist.add(form);
			}
		}
		return flist;
	}
	/**
	 * 
	 *@category 获取医疗机构信息列表，排除已在项目中的
	 *@author 邱磊
	 *@date 2015年6月11日 上午11:51:49
	 *@param page
	 *@return
	 */
	
	public Pagination getAddHospDataList(Pagination page){
		page = bidProjectDao.getAddHospDataList(page);
		return page;
	}
	
	@Transactional
	public String addHost(String projId, String hospCode, String userId){
		return bidProjectDao.addHost(projId, hospCode, userId);
	}
	
	public BidProject getBidProjectById(String projId) {
		return bidProjectDao.getBidProjectById(projId);
	}
	
	/**
	 * @category 采购项目新增、修改
	 * @author 张俊
	 * @date   2015-06-1
	 * @param bidProject：采购项目
	 * @return 
	 */
	@Transactional
	public void saveOrUpdate(BidProjectForm form) {
		bidProjectDao.saveOrUpdate(form);
	}
	/**
	 * 
	 *@category 启用停用（批量）
	 *@author 邱磊
	 *@date 2015年8月18日 上午11:57:17
	 *@param list
	 *@param userId
	 */
	@Transactional
	public void batchSwitchStatus(List<BidProject> list, String userId){
		bidProjectDao.batchSwitchStatus(list,userId);
	}
	
	@Value("#{proindexProp['proj.count']}")
    private String projCount;
	
	
	@Autowired
	private Properties proindexProp;
	
	
	
	@Value("#{sysProp['system.province']}")
	private String province;
	/**
	 * 
	 *@category 获取项设置时间段目详情
	 *@author 邱磊
	 *@date 2015年8月18日 下午1:34:15
	 *@param projId
	 *@return
	 * @throws IOException 
	 */
	public List<BidProjectForm> getSettimeDataDetail(String projId) throws IOException{
		Map<String, Object> map = bidProjectDao.getDataDetail(projId);
		int projCount = ParseNumber.toInteger(proindexProp.getProperty("proj.count"));
		List<BidProjectForm> list = new ArrayList<BidProjectForm>();
		boolean curFlag = false;
		boolean thisCurStats = true;
		for (int i = 0; i < projCount; i++){
			BidProjectForm form = new BidProjectForm();
			String name = proindexProp.getProperty("proj.index"+i);
			boolean flag = Boolean.valueOf(proindexProp.getProperty("proj."+province+".enable."+name));
			if (flag){
				form.setIsCurStatusClose(map.get("isCurStatusClose")==null?"0":map.get("isCurStatusClose").toString());
				form.setTimeName(new String(proindexProp.getProperty("proj.name."+name).getBytes("ISO-8859-1"), "utf-8"));
				int k = name.indexOf("_");
				String mapName = name;
				while ( k > 0){
					mapName = mapName.substring(0,k)+mapName.substring(k+1,k+2).toUpperCase()+mapName.substring(k+2);
					k = mapName.indexOf("_");
				}
				form.setTimeValue(map.get(mapName)==null?null:map.get(mapName).toString());
				form.setStatusName(name);
				if (null == map.get("curStatus") || "".equals(map.get("curStatus").toString()) || "0".equals(map.get("curStatus").toString())){
					form.setCurStatus(1);
					if (thisCurStats && 1 == i){
						form.setThisCurStatus(true);
						thisCurStats = false;
					}
					
				} else {
					boolean f = false;
					form.setCurStatus(StringUtils.isBlank(ConstantsUtil.curStatus(name))?list.get(list.size()-1).getCurStatus():ParseNumber.toInteger(ConstantsUtil.curStatus(name)));
					if (null != ConstantsUtil.curStatus(name) && !"".equals(ConstantsUtil.curStatus(name))){
						
//						if (ParseNumber.toInteger(map.get("curStatus").toString()).intValue() == ParseNumber.toInteger(ConstantsUtil.curStatus(name)).intValue()){
						if (ParseNumber.toInteger(map.get("curStatus").toString()).intValue() == ParseNumber.toInteger(ConstantsUtil.curStatus(name)).intValue()){
							form.setNowStatus(true);
							form.setCurStatus(ParseNumber.toInteger(map.get("curStatus").toString()).intValue());
								form.setThisCurStatus("1".equals(form.getIsCurStatusClose())?true:false);
							if (! "1".equals(form.getIsCurStatusClose()) && -1 != name.indexOf("_end")){
								f = true;
								form.setThisCurStatus(false);
							}
						}
					}
					form.setCur_status(map.get("curStatus").toString());
					if (curFlag){
						form.setThisCurStatus(true);
						curFlag = false;
					}
					curFlag = f;
				}
				form.setIdName(name);
				form.setTimeFormat(proindexProp.getProperty("proj.format."+name));
				list.add(form);
				
			}
			
		}
		return list;
		
	}
	
	
	/**
	 * 
	 *@category 获取项目详情
	 *@author 邱磊
	 *@date 2015年8月18日 下午1:34:15
	 *@param projId
	 *@return
	 * @throws IOException 
	 */
	public Map<String, Object> getDataDetail(String projId){
		return bidProjectDao.getDataDetail(projId);
	}
	
	/**
	 * 
	 *@category 批量添加医疗机构
	 *@author 邱磊
	 *@date 2015年8月18日 下午3:26:24
	 *@param page
	 */
	@Transactional
	public void batchAddHosp(Pagination page){
		bidProjectDao.batchAddHosp(page);
	}
	
	/**
	 * 
	 *@category 未添加药品分页查询列表
	 *@author 言科
	 *@date 2015年6月13日
	 *Pagination
	 */
	public Pagination getUnBidProjectDrugList(Pagination page) {
		page = bidProjectDao.getUnBidProjectDrugList(page);
		return page;
	}

	
	@Override
	public void batchSubmitDrugTOProj(List<BidPurProjDrugsForm> drugList, String userId) {
		bidProjectDao.batchSubmitDrugTOProj(drugList, userId);
	}
	@Override
	public Pagination getUnBidProjectCompList(Pagination page) {
		return bidProjectDao.getUnBidProjectCompList(page);
		
	}
	
	@Transactional
	@Override
	public void batchSubmitCompTOProj(List<BidProjCompany> compList) {
		BidProject bp =  bidProjectDao.getBidProjectById(compList.get(0).getProjId());
		bidProjectDao.batchSubmitCompTOProj(compList,bp);
	}
	
	/**
	 * @category 项目已添加配送企业数据查询
	 * @author 韩守松
	 * @date   2015年7月9日
	 * @param  @param page
	 * @param  @return
	 */
	public Pagination getAddedBidProjectCompsList(Pagination page) {
		return bidProjectDao.getAddedBidProjectCompsList(page);
	}
	
	/**
	 * @category 项目已添加配送企业启用停用
	 * @author 韩守松
	 * @date   2015年7月9日
	 * @param  @param bidProjCompany
	 * @param  @param status
	 * @param  @return
	 */
	@Transactional
	public boolean updateCompStatus(BidProjCompany bidProjCompany,Integer status) {
		return bidProjectDao.updateCompStatus(bidProjCompany,status);
	}
	
	/**
	 * @category 项目已添加配送企业批量启用停用
	 * @author 韩守松
	 * @date   2015年7月9日
	 * @param  @param bidProjCompany
	 * @param  @param status
	 * @param  @return
	 */
	@Transactional
	public boolean batchUpdateCompStatus(BidProjCompany bidProjCompany,Integer status) {
		return bidProjectDao.batchUpdateCompStatus(bidProjCompany,status);
	}
	/**
	 * 
	 *@category 已添加药品分页查询列表
	 *@author 言科
	 *@date 2015年6月13日
	 *Pagination
	 */
	public Pagination getAddedBidProjectDrugList(Pagination page) {
		page = bidProjectDao.getAddedBidProjectDrugList(page);
		List<Map<String, Object>> list = (List<Map<String, Object>>) page.getRows();
		if (null != list && list.size() > 0){
			for (int i = 0; i < list.size(); i++){
				Map<String, Object> map = list.get(i);
				map.put("status", Status.getName(ParseNumber.toInteger(map.get("status").toString())));
			}
		}
		return page;
	}
		
	/**
	 * @category 项目已添加药品启用停用
	 * @author 韩守松
	 * @date   2015年7月8日
	 * @param  @return
	 */
	@Transactional
	public boolean updateStatus(BidProjdrugs bidProjdrugs,Short status) {
		return bidProjectDao.updateStatus(bidProjdrugs,status);
	}
	
	/**
	 * @category 项目已添加药品批量启用停用
	 * @author 韩守松
	 * @date   2015年7月8日
	 * @param  @return
	 */
	@Transactional
	public boolean batchUpdateStatus(BidProjdrugs bidProjdrugs,Short status) {
		return bidProjectDao.batchUpdateStatus(bidProjdrugs,status);
	}
	

	/**
	 * 
	 *@category 获取已添加的医疗机构数据
	 *@author 邱磊
	 *@date 2015年8月18日 下午4:08:51
	 *@param page
	 *@return
	 */
	public Pagination getHaveAddHospsList(Pagination page) {
		return bidProjectDao.getHaveAddHospsList(page);
		
	}
	
	/**
	 * 
	 *@category 已添加医疗机构停用启用
	 *@author 邱磊
	 *@date 2015年8月18日 下午5:00:50
	 *@param list
	 *@param userId
	 *@return
	 */
	public void batchSwitchHospStatus(List<BidProjhospital> list,String userId) {
		bidProjectDao.batchSwitchHospStatus(list,userId);
	}
	
	/**
	 * 
	 *@category 获取添加药品数据
	 *@author 邱磊
	 *@date 2015年8月19日 上午9:31:56
	 *@param page
	 *@return
	 */
	public Pagination getAddDrugDataList(Pagination page){
		return bidProjectDao.getAddDrugDataList(page);
	}
	
	/**
	 * @category 项目已添加医疗机构批量启用停用
	 * @author 韩守松
	 * @date   2015年7月8日
	 * @param  @return
	 */
	public boolean batchUpdateHospStatus(BidProjhospital bidProjhospital,Short status) {
		return bidProjectDao.batchUpdateHospStatus(bidProjhospital,status);
	}
	
	@Override
	public void batchSubmitHospTOProj(List<BidProjhospital> hospList) {
		bidProjectDao.batchSubmitHospTOProj(hospList);
	}
	
	/**
	 * 
	 *@category 查询所有已启用的采购项目列表
	 *@author 张俊
	 *@date 2015年6月13日
	 *@param Pagination
	 *@param bidProject
	 *@return
	 */
	public List<BidProject> getBidProjectList(Pagination page, BidProject bidProject) {
		return bidProjectDao.getBidProjectList(page, bidProject);
	}
	
	/**
	 * 查询企业机构下的有效项目
	 * @category
	 * @auth 陈镜宇
	 * @return
	 * @date 2015年6月15日
	 */
	@Override
	public List<BidProject> getBidProjectListByCompId(String compId,String compType) {
		return bidProjectDao.getBidProjectListByCompId(compId,compType);
	}
	
	/**
	 * @category  获取采购项目下拉框
	 * @author 韩守松
	 * @date   2015年6月16日
	 * @param  @param page
	 * @param  @param bidProject
	 * @param  @return
	 */
	@Override
	public List<BidProject> getBidProjectSelectList(Pagination page,
			BidProject bidProject) {
		return bidProjectDao.getBidProjectSelectList(page, bidProject);
	}
	/**
	 * 
	 *@category 启用，停用
	 *@author 邱磊
	 *@date 2015年6月24日 上午9:51:30
	 *@param projId
	 *@param status
	 */
	public void switchStatus(BidProject data){
		bidProjectDao.switchStatus(data);
	}

	/**
	 * @category 根据项目编号查询项目信息
	 * @author 韩守松
	 * @date   2015年7月13日
	 * @param  @return
	 */
	public List<BidProject> getProjectListByProjectCode(BidProject bidProject) {
		return bidProjectDao.getProjectListByProjectCode(bidProject);
	} 
	/**
	 * @category 根据项目名称查询项目信息在
	 * @author 韩守松
	 * @date   2015年7月13日
	 * @param  @return
	 */
	public List<BidProject> getProjectListByProjectName(BidProject bidProject) {
		return bidProjectDao.getProjectListByProjectName(bidProject);
	} 
	
	/**
	 * 
	 *@category 获取采购项目日志详情
	 *@author 邱磊
	 *@date 2015年8月19日 下午2:16:21
	 *@param projId
	 *@param updDatetime
	 *@return
	 */
	public BidProjectDetailLogForm getDetailLog(String projId,String updDatetime){
		List<Map<String, Object>> list = bidProjectDao.getDetailLog(projId, updDatetime);
		if (null != list && list.size() > 0){
			BidProjectDetailLogForm form = new BidProjectDetailLogForm();
			if (list.size() > 2){
				form.setNextFlag(true);
			}
			String lastUpdtime = bidProjectDao.getDetailLogLastUpdtime(projId, updDatetime);
			if (StringUtils.isNotBlank(lastUpdtime)){
				form.setLastFlag(true);
			}
			Map<String, Object> thismap = list.get(0);
			form.setProjId(thismap.get("projId")==null?"":thismap.get("projId").toString());
			form.setProjCode(thismap.get("projCode")==null?"":thismap.get("projCode").toString());
			form.setName(thismap.get("name")==null?"":thismap.get("name").toString());
			form.setProjIntro(thismap.get("projIntro")==null?"":thismap.get("projIntro").toString());
			form.setStarttime(thismap.get("starttime")==null?"":thismap.get("starttime").toString());
			form.setEndtime(thismap.get("endtime")==null?"":thismap.get("endtime").toString());
			form.setProjCat(thismap.get("projCat")==null?"":thismap.get("projCat").toString());
			form.setRemark(thismap.get("remark")==null?"":thismap.get("remark").toString());
			form.setStatus(thismap.get("status")==null?"":Status.getName(ParseNumber.toInteger(thismap.get("status").toString())));
			form.setCreateDatetime(thismap.get("createDatetime")==null?"":thismap.get("createDatetime").toString());
			form.setCreateUser(thismap.get("createUser")==null?"":thismap.get("createUser").toString());
			form.setProjStarttime(thismap.get("projStarttime")==null?"":thismap.get("projStarttime").toString());
			form.setProjEndtime(thismap.get("projEndtime")==null?"":thismap.get("projEndtime").toString());
			form.setPriceQuoteSimuStarttime(thismap.get("priceQuoteSimuStarttime")==null?"":thismap.get("priceQuoteSimuStarttime").toString());
			form.setPriceQuoteSimuEndtime(thismap.get("priceQuoteSimuEndtime")==null?"":thismap.get("priceQuoteSimuEndtime").toString());
			form.setPriceQuoteStarttime(thismap.get("priceQuoteStarttime")==null?"":thismap.get("priceQuoteStarttime").toString());
			form.setPriceQuoteEndtime(thismap.get("priceQuoteEndtime")==null?"":thismap.get("priceQuoteEndtime").toString());
			form.setPriceQuoteDecodeStarttime(thismap.get("priceQuoteDecodeStarttime")==null?"":thismap.get("priceQuoteDecodeStarttime").toString());
			form.setPriceQuoteDecodeEndtime(thismap.get("priceQuoteDecodeEndtime")==null?"":thismap.get("priceQuoteDecodeEndtime").toString());
			form.setPriceQuotePassword1(thismap.get("priceQuotePassword1")==null?"":thismap.get("priceQuotePassword1").toString());
			form.setPriceQuotePassword2(thismap.get("priceQuotePassword2")==null?"":thismap.get("priceQuotePassword2").toString());
			form.setPriceQuotePassword3(thismap.get("priceQuotePassword3")==null?"":thismap.get("priceQuotePassword3").toString());
			form.setPriceQuotePassword4(thismap.get("priceQuotePassword4")==null?"":thismap.get("priceQuotePassword4").toString());
			form.setPriceQuotePassword5(thismap.get("priceQuotePassword5")==null?"":thismap.get("priceQuotePassword5").toString());
			form.setPriceGradeStarttime(thismap.get("priceGradeStarttime")==null?"":thismap.get("priceGradeStarttime").toString());
			form.setPriceGradeEndtime(thismap.get("priceGradeEndtime")==null?"":thismap.get("priceGradeEndtime").toString());
			form.setSemiWinPubStarttime(thismap.get("semiWinPubStarttime")==null?"":thismap.get("semiWinPubStarttime").toString());
			form.setSemiWinPubEndtime(thismap.get("semiWinPubEndtime")==null?"":thismap.get("semiWinPubEndtime").toString());
			form.setAppealStarttime(thismap.get("appealStarttime")==null?"":thismap.get("appealStarttime").toString());
			form.setAppealEndtime(thismap.get("appealEndtime")==null?"":thismap.get("appealEndtime").toString());
			form.setUpdDatetime(thismap.get("updDatetime")==null?"":thismap.get("updDatetime").toString());
			form.setUpdUser(thismap.get("updUser")==null?"":thismap.get("updUser").toString());
			if (list.size() > 1){
				Map<String, Object> lastmap = list.get(1);
				if (null != lastmap && lastmap.size() > 0){
					form.setLastPriceQuotePassword1(lastmap.get("priceQuotePassword1")==null?"":lastmap.get("priceQuotePassword1").toString());
					form.setLastPriceQuotePassword2(lastmap.get("priceQuotePassword2")==null?"":lastmap.get("priceQuotePassword2").toString());
					form.setLastPriceQuotePassword3(lastmap.get("priceQuotePassword3")==null?"":lastmap.get("priceQuotePassword3").toString());
					form.setLastPriceQuotePassword4(lastmap.get("priceQuotePassword4")==null?"":lastmap.get("priceQuotePassword4").toString());
					form.setLastPriceQuotePassword5(lastmap.get("priceQuotePassword5")==null?"":lastmap.get("priceQuotePassword5").toString());
					form.setLastPriceGradeStarttime(lastmap.get("priceGradeStarttime")==null?"":lastmap.get("priceGradeStarttime").toString());
					form.setLastPriceGradeEndtime(lastmap.get("priceGradeEndtime")==null?"":lastmap.get("priceGradeEndtime").toString());
					form.setLastSemiWinPubStarttime(lastmap.get("semiWinPubStarttime")==null?"":lastmap.get("semiWinPubStarttime").toString());
					form.setLastSemiWinPubEndtime(lastmap.get("semiWinPubEndtime")==null?"":lastmap.get("semiWinPubEndtime").toString());
					form.setLastAppealStarttime(lastmap.get("appealStarttime")==null?"":lastmap.get("appealStarttime").toString());
					form.setLastAppealEndtime(lastmap.get("appealEndtime")==null?"":lastmap.get("appealEndtime").toString());
					form.setLastUpdDatetime(lastmap.get("updDatetime")==null?"":lastmap.get("updDatetime").toString());
					form.setLastUpdUser(lastmap.get("updUser")==null?"":lastmap.get("updUser").toString());
				}
			}
			return form;
		}
		return null;
	}

	/**
	 * 
	 *@category 获取设置密码信息（如果没有设置过则可以直接设置，如果设置过需要输原密码进行设置）
	 *@author 邱磊
	 *@date 2015年8月20日 下午5:09:03
	 *@param projId
	 *@return
	 */
	public BidProjectForm getPasswordInfo(String projId) {
		BidProjectDetails data = bidProjectDao.getPasswordInfo(projId);
		BidProjectForm form = new BidProjectForm();
		//BeanUtils.copyProperties(data, form);
		BeanCopierUtils.copyProperties(data, form);
		form.setProjStarttime(data.getProjStarttime()==null?null:ParseDate.parseFullFormat(data.getProjStarttime()));
		form.setProSubmitStarttime(data.getProSubmitStarttime()==null?null:ParseDate.parseFullFormat(data.getProSubmitStarttime()));
		form.setProSubmitEndtime(data.getProSubmitEndtime()==null?null:ParseDate.parseFullFormat(data.getProSubmitEndtime()));
		form.setProAuditStarttime(data.getProAuditStarttime()==null?null:ParseDate.parseFullFormat(data.getProAuditStarttime()));
		form.setProAuditEndtime(data.getProAuditEndtime()==null?null:ParseDate.parseFullFormat(data.getProAuditEndtime()));
		form.setProAuditPubStarttime(data.getProAuditPubStarttime()==null?null:ParseDate.parseFullFormat(data.getProAuditPubStarttime()));
		form.setProAuditPubEndtime(data.getProAuditPubEndtime()==null?null:ParseDate.parseFullFormat(data.getProAuditPubEndtime()));
		form.setComplainStarttime(data.getComplainStarttime()==null?null:ParseDate.parseFullFormat(data.getComplainStarttime()));
		form.setComplainEndtime(data.getComplainEndtime()==null?null:ParseDate.parseFullFormat(data.getComplainEndtime()));
		form.setComplainPubStarttime(data.getComplainPubStarttime()==null?null:ParseDate.parseFullFormat(data.getComplainPubStarttime()));
		form.setComplainPubEndtime(data.getComplainPubEndtime()==null?null:ParseDate.parseFullFormat(data.getComplainPubEndtime()));
		form.setPriceQuoteDecodeStarttime(data.getPriceQuoteDecodeStarttime()==null?null:ParseDate.parseFullFormat(data.getPriceQuoteDecodeStarttime()));
		form.setPriceQuoteDecodeEndtime(data.getPriceQuoteDecodeEndtime()==null?null:ParseDate.parseFullFormat(data.getPriceQuoteDecodeEndtime()));
		form.setPriceQuoteStarttime(data.getPriceQuoteEndtime()==null?null:ParseDate.parseFullFormat(data.getPriceQuoteEndtime()));
		form.setPriceQuoteSimuStarttime(data.getPriceQuoteSimuStarttime()==null?null:ParseDate.parseFullFormat(data.getPriceQuoteSimuStarttime()));
		form.setPriceQuoteSimuEndtime(data.getPriceQuoteSimuEndtime()==null?null:ParseDate.parseFullFormat(data.getPriceQuoteSimuEndtime()));
		form.setPriceGradeStarttime(data.getPriceGradeStarttime()==null?null:ParseDate.parseFullFormat(data.getPriceGradeStarttime()));
		form.setPriceGradeEndtime(data.getPriceGradeEndtime()==null?null:ParseDate.parseFullFormat(data.getPriceGradeEndtime()));
		form.setSemiWinPubStarttime(data.getSemiWinPubStarttime()==null?null:ParseDate.parseFullFormat(data.getSemiWinPubStarttime()));
		form.setSemiWinPubEndtime(data.getSemiWinPubEndtime()==null?null:ParseDate.parseFullFormat(data.getSemiWinPubEndtime()));
		form.setAppealStarttime(data.getAppealStarttime()==null?null:ParseDate.parseFullFormat(data.getAppealStarttime()));
		form.setAppealEndtime(data.getAppealEndtime()==null?null:ParseDate.parseFullFormat(data.getAppealEndtime()));
		form.setWinPubStarttime(data.getWinPubStarttime()==null?null:ParseDate.parseFullFormat(data.getWinPubStarttime()));
		form.setWinPubEndtime(data.getWinPubEndtime()==null?null:ParseDate.parseFullFormat(data.getWinPubEndtime()));
		form.setProjEndtime(data.getProjEndtime()==null?null:ParseDate.parseFullFormat(data.getProjEndtime()));
		
		form.setPasswordCount(data.getPasswordCount());
		if (StringUtils.isBlank(data.getPriceQuotePassword1())){
			form.setFirstSetPswd(true);
		}
		return form;
	}
	/**
	 * 
	 *@category 设置密码
	 *@author 邱磊
	 *@date 2015年8月21日 上午9:10:05
	 *@param page
	 *@return
	 */
	public Pagination setPassword(Pagination page){
		String projId = page.getConditions().get("projId");
		BidProject data = bidProjectDao.getBidProjectById(projId);
		if (0 == data.getStatus()){
			page.setSuccess(false);
			page.setMsg("项目已经停用，不可再设置密码！");
			return page;
		}
		if (StringUtils.isNotBlank(page.getConditions().get("firstSetPswd"))){
			boolean firstSetPswd = Boolean.valueOf(page.getConditions().get("firstSetPswd"));
			Object[] obj = (Object[]) page.getForm();
			if (firstSetPswd){//第一次设置密码
				String[] pswd = (String[]) obj[0];
				String[] pswdConfirm = (String[]) obj[1];
				for (int i = 0; i < pswd.length; i++){
					if (StringUtils.isBlank(pswd[i])){
						page.setSuccess(false);
						page.setMsg("密码"+(i+1)+"不能为空！");
						return page;
					}
					if (StringUtils.isBlank(pswdConfirm[i])){
						page.setSuccess(false);
						page.setMsg("确认密码"+(i+1)+"不能为空！");
						return page;
					}
					if (!pswd[i].equals(pswdConfirm[i])){
						page.setSuccess(false);
						page.setMsg("密码"+(i+1)+"与确认密码不符！");
						return page;
					}
				}
				
				bidProjectDao.setPassword(projId, pswd);
				page.setSuccess(true);
				return page;
				
			} else {//修改密码
				String[] pswd = (String[]) obj[0];
				String[] newPswd = (String[]) obj[2];
				String[] newPswdConfirm = (String[]) obj[3];
				for (int i = 0; i < pswd.length; i ++){
					if (StringUtils.isBlank(pswd[i])){
						page.setSuccess(false);
						page.setMsg("请输入密码"+(i+1));
						return page;
					}
					if (StringUtils.isBlank(newPswd[i])){
						page.setSuccess(false);
						page.setMsg("请输入新密码"+(i+1));
						return page;
					}
					if (StringUtils.isBlank(newPswdConfirm[i])){
						page.setSuccess(false);
						page.setMsg("请输入新确认密码"+(i+1));
						return page;
					}
					if (!newPswd[i].equals(newPswdConfirm[i])){
						page.setSuccess(false);
						page.setMsg("新密码"+(i+1)+"与确认密码不符！");
						return page;
					} 
				}
				return bidProjectDao.modifyPassword(page);
			}
			
		} else {
			page.setSuccess(false);
			page.setMsg("修改密码失败！");
			return page;
		}
	}
	
	/**
	 * 
	 *@category 设置项目招标各阶段时间
	 *@author 邱磊
	 *@date 2015年8月21日 下午3:03:13
	 *@param form
	 * @throws IOException 
	 */
	@SuppressWarnings("unused")
	public Pagination setProjTime(BidProjectForm form,HttpServletRequest request) throws IOException{
		Pagination page = new Pagination();
		if (null != form.getCurStatus() && 13 != form.getCurStatus().intValue()){
			int projCount = ParseNumber.toInteger(proindexProp.getProperty("proj.count"));
			List<BidProjectForm> list = new ArrayList<BidProjectForm>();
			
			String endtime = request.getParameter("proj_starttime");
			String name = proindexProp.getProperty("proj.index0");
			if (StringUtils.isBlank(endtime)){
				page.setSuccess(false);
				page.setMsg(new String(proindexProp.getProperty("proj.name."+name).getBytes("ISO-8859-1"), "utf-8")+"不能为空！");
				return page;
			}
			endtime +=  " 00:00:00";
			String lsName = new String(proindexProp.getProperty("proj.name."+name).getBytes("ISO-8859-1"), "utf-8");
			Date tt = null;
			for (int i = 1; i < projCount-1; i++){
				
				name = proindexProp.getProperty("proj.index"+i);
				Date ed = ParseDate.fromFullFormat(endtime);
				String time = request.getParameter(name);
				if (form.getCurStatus().intValue() == ParseNumber.toInteger(ConstantsUtil.curStatus(name)).intValue()){
					if (StringUtils.isBlank(time)){
						page.setSuccess(false);
						page.setMsg(new String(proindexProp.getProperty("proj.name."+name).getBytes("ISO-8859-1"), "utf-8")+"不能为空！");
						return page;
					}
				}
				if (StringUtils.isNotBlank(time)){
					endtime = time;
					tt = ParseDate.fromFullFormat(time); 
					if (null == tt){
						if (i % 2 == 1){
							tt = ParseDate.fromFullFormat(time + " 00:00:00");
							endtime = time + " 00:00:00";
						} else {
							tt = ParseDate.fromFullFormat(time + " 23:59:59");
							endtime = time + " 23:59:59";
						}
					}
					if (tt.getTime() < ed.getTime()){
						page.setSuccess(false);
						page.setMsg(new String(proindexProp.getProperty("proj.name."+name).getBytes("ISO-8859-1"), "utf-8") + "不能小于" + lsName);
						return page;
					} 
					lsName = new String(proindexProp.getProperty("proj.name."+name).getBytes("ISO-8859-1"), "utf-8");
				}
			}
			if (StringUtils.isNotBlank(request.getParameter("proj_endtime"))){
				if (tt.getTime()>ParseDate.fromFullFormat(request.getParameter("proj_endtime")+" 23:59:59").getTime()){
					page.setSuccess(false);
					page.setMsg(lsName + "不能大于项目结束时间");
					return page;
				}
			}
		}
		try {
			bidProjectDao.setProjTime(form);
			page.setSuccess(true);
		} catch (Exception e) {
			e.printStackTrace();
			throw new MSException(e.toString());
		}
		return page;
	}
	/**
	 * 
	 *@category 获取药物目录列表数据
	 *@author 邱磊
	 *@date 2015年8月24日 下午3:21:29
	 *@param page
	 *@return
	 */
	@SuppressWarnings("unchecked")
	public Pagination getImportDrugByCatalogDataList(Pagination page){
		page = bidProjectDao.getImportDrugByCatalogDataList(page);
		List<Map<String, Object>> list = (List<Map<String, Object>>) page.getRows();
		if (null != list && list.size() > 0){
			for (int i = list.size()-1; i >=0 ; i--){
				Map<String, Object> map = list.get(i);
				if(map.get("count").toString().equals("0")){
					list.remove(i);		
				}
			}
			page.setRows(list);
			page.setRecords(list.size());
		}
		return page;
	}
	/**
	 * 
	 *@category 按目录全部导入（已经存在的不忽略）
	 *@author 邱磊
	 *@date 2015年8月24日 下午4:11:11
	 *@param page
	 */
	public void importDrugByCatalog(Pagination page){
		bidProjectDao.importDrugByCatalog(page);
	}
	/**
	 * 
	 *@category 获取按药物目录逐条导入数据列表（排除已加入的）
	 *@author 邱磊
	 *@date 2015年8月25日 上午10:36:53
	 *@return
	 */
	public Pagination getDrugByCatalogDataList(Pagination page){
		return bidProjectDao.getDrugByCatalogDataList(page);
	}
	/**
	 * 
	 *@category 逐条导入药物目录药品
	 *@author 邱磊
	 *@date 2015年8月25日 下午1:35:15
	 *@param page
	 */
	@Transactional
	public void importDrugByCatalogDetail(Pagination page){
		bidProjectDao.importDrugByCatalogDetail(page);
	}
	/**
	 * 
	 *@category 按品规导入药品
	 *@author 邱磊
	 *@date 2015年8月25日 下午1:35:15
	 *@param page
	 */
	public void importDrugqualityspec(Pagination page){
		bidProjectDao.importDrugqualityspec(page);
	}
	
	/**
	 * 
	 *@category 获取按品规导入列表
	 *@author 邱磊
	 *@date 2015年8月25日 下午2:20:13
	 *@param page
	 *@return
	 */
	public Pagination getDrugqualityspecDataList(Pagination page){
		return bidProjectDao.getDrugqualityspecDataList(page);
	}
	/**
	 * 
	 *@category 获取已添加药品数据
	 *@author 邱磊
	 *@date 2015年8月25日 下午4:37:19
	 *@param page
	 *@return
	 */
	@SuppressWarnings("unchecked")
	public Pagination getHaveAddDrugDataList(Pagination page){
		page = bidProjectDao.getHaveAddDrugDataList(page);
		List<Map<String, Object>> list = (List<Map<String, Object>>) page.getRows();
		if (null != list && list.size() > 0){
			for (int i = 0; i < list.size(); i++){
				Map<String, Object> map = list.get(i);
				map.put("status", map.get("status")==null?"":Status.getName(ParseNumber.toInteger(map.get("status").toString())));
			}
		}
		return page;
	}
	/**
	 * 
	 *@category 启用停用已添加的药品（批量）
	 *@author 邱磊
	 *@date 2015年8月25日 下午6:44:16
	 *@param page
	 */
	@Transactional
	public void batchSwitchDrugStatus(Pagination page){
		bidProjectDao.batchSwitchDrugStatus(page);
	}
	/**
	 * 
	 *@category 关闭当前正在进行的阶断
	 *@author 邱磊
	 *@date 2015年8月25日 下午8:21:54
	 *@param point
	 */
	public void closePoint(String point,String projId){
		bidProjectDao.closePoint(point,projId);
	}
	/**
	 * 
	 *@category 开启下一个节点
	 *@author 邱磊
	 *@date 2015年8月25日 下午8:21:54
	 *@param point
	 */
	public void openPoint(String point,String projId){
		bidProjectDao.openPoint(point,projId);
	}
	/**
	 *@category 获取项目中已申报资质的企业列表
	 *@author 邱磊
	 *@date 2015年8月27日 上午9:12:42
	 *@param page
	 *@return
	 */
	public Pagination getCompprofileCompDataList(Pagination page){
		return bidProjectDao.getCompprofileCompDataList(page);
	}
	/**
	 * 
	 *@category 获取企业资质详情
	 *@author 邱磊
	 *@date 2015年8月27日 上午10:31:26
	 *@param projId
	 *@param compId
	 *@return
	 */
	@SuppressWarnings("unchecked")
	public Pagination getCompprofileDetail(Pagination page){
		page = bidProjectDao.getCompprofileDetail(page);
		List<Map<String, Object>> list = (List<Map<String, Object>>) page.getRows();
		if (null != list && list.size() > 0){
			for (int i = 0; i < list.size(); i++){
				Map<String, Object> map = list.get(i);
				map.put("auditStatus", map.get("auditStatus")==null?"":ConstantsUtil.compprofileAuditStatus(map.get("auditStatus").toString()));
				map.put("complainStatus", map.get("complainStatus")==null?"":ConstantsUtil.compprofileComplainStatus(map.get("complainStatus").toString()));
			}
		}
		return page;
	}
	/**
	 * 
	 *@category 审核企业资质
	 *@author 邱磊
	 *@date 2015年8月27日 下午4:28:36
	 *@param page
	 */
	@Transactional
	public void auditCompprofile(Pagination page){
		bidProjectDao.auditCompprofile(page);
	}
	/**
	 * 
	 *@category 澄清审核企业资质
	 *@author 邱磊
	 *@date 2015年8月27日 下午4:28:36
	 *@param page
	 */
	@Transactional
	public void auditCompprofileAudit(Pagination page){
		bidProjectDao.auditCompprofileAudit(page);
	}
	/**
	 * 
	 *@category 获取申报药品的生产企业列表数据
	 *@author 邱磊
	 *@date 2015年8月28日 上午9:47:29
	 *@return
	 */
	public Pagination getDeclareDrugByCompDataList(Pagination page){
		return bidProjectDao.getDeclareDrugByCompDataList(page);
	}
	/**
	 * 
	 *@category 获取企业申报的项品列表数据
	 *@author 邱磊
	 *@date 2015年8月28日 上午10:26:54
	 *@return
	 */
	public Pagination getCompDeclareDrugList(Pagination page){
		return bidProjectDao.getCompDeclareDrugList(page);
	}
	/**
	 * 
	 *@category 获取药品资质详情
	 *@author 邱磊
	 *@date 2015年8月28日 下午1:58:27
	 *@param page
	 *@return
	 */
	@SuppressWarnings("unchecked")
	public Pagination getDrugCompprofileDetail(Pagination page){
		page = bidProjectDao.getDrugCompprofileDetail(page);
		List<Map<String, Object>> list = (List<Map<String, Object>>) page.getRows();
		if (null != list && list.size() > 0){
			for (int i = 0; i < list.size(); i++){
				Map<String, Object> map = list.get(i);
				map.put("auditStatus", map.get("auditStatus")==null?"":ConstantsUtil.compprofileAuditStatus(map.get("auditStatus").toString()));
				map.put("complainStatus", map.get("complainStatus")==null?"":ConstantsUtil.compprofileComplainStatus(map.get("complainStatus").toString()));
			}
		}
		return page;
	}
	/**
	 * 
	 *@category 审核药品资质
	 *@author 邱磊
	 *@date 2015年8月28日 下午2:40:58
	 *@param page
	 */
	public void auditDrugCompprofile(Pagination page){
		bidProjectDao.auditDrugCompprofile(page);
	}
	/**
	 * 
	 *@category 审核药品资质澄清
	 *@author 邱磊
	 *@date 2015年8月28日 下午2:40:58
	 *@param page
	 */
	public void auditComplianDrugCompprofile(Pagination page){
		bidProjectDao.auditComplianDrugCompprofile(page);
	}
	/**
	 * 
	 *@category 获取按药品审核药品资质列表数据
	 *@author 邱磊
	 *@date 2015年8月29日 下午2:13:29
	 *@return
	 */
	public Pagination getAuditDrugCompprofileByDrugList(Pagination page){
		return bidProjectDao.getAuditDrugCompprofileByDrugList(page);
	}
	/**
	 * 
	 *@category 审核申报药品
	 *@author 邱磊
	 *@date 2015年8月31日 上午11:37:09
	 *@param page
	 */
	public void auditDrug(Pagination page){
		bidProjectDao.auditDrug(page);
	}
	/**
	 * 
	 *@category 澄清审核申报药品
	 *@author 邱磊
	 *@date 2015年8月31日 上午11:37:09
	 *@param page
	 */
	public void auditComplainDrug(Pagination page){
		bidProjectDao.auditComplainDrug(page);
	}
	/**
	 * 
	 *@category 获取公示详情
	 *@author 邱磊
	 *@date 2015年8月31日 下午5:34:11
	 *@return
	 */
	public List<Map<String, Object>> getPubSettingDetail(String projId){
		return bidProjectDao.getPubSettingDetail(projId);
	}
	/**
	 * 
	 *@category 新增设置
	 *@author 邱磊
	 *@date 2015年8月31日 下午6:37:24
	 *@param page
	 */
	@Transactional
	public void addSetting(BidPubSettings form){
		bidProjectDao.addSetting(form);
	}

	@Override
	public List<Map<String, Object>> getViewInfo(String sql) {
		// TODO Auto-generated method stub
		return null;
	}
	/**
	 * 
	 *@category 获取项目下拉列表
	 *@author 邱磊
	 *@date 2015年9月2日 上午10:15:44
	 *@return
	 */
	public List<Map<String, Object>> getProjList(){
		return bidProjectDao.getProjList();
	}
	/**
	 * 
	 *@category 获取生产企业已申报的药品
	 *@author 邱磊
	 *@date 2015年9月2日 下午1:58:30
	 *@param page
	 *@return
	 */
	public Pagination getDeclareDrugDataList(Pagination page){
		return bidProjectDao.getDeclareDrugDataList(page);
	}
	/**
	 * 
	 *@category 获取已申报药品资质的药品
	 *@author 邱磊
	 *@date 2015年9月2日 下午4:04:53
	 *@return
	 */
	public Pagination getDrugCompprofileList(Pagination page){
		return bidProjectDao.getDrugCompprofileList(page);
	}
	/**
	 * 
	 *@category 获取报名的生产企业列表
	 *@author 邱磊
	 *@date 2015年9月7日 上午10:55:38
	 *@return
	 */
	@SuppressWarnings("unchecked")
	public Pagination getJoinProCompDataList(Pagination page){
		page = bidProjectDao.getJoinProCompDataList(page);
		List<Map<String, Object>> list = (List<Map<String, Object>>) page.getRows();
		if (null != list && list.size() > 0){
			for (int i = 0; i < list.size(); i++){
				Map<String, Object> map = list.get(i);
				map.put("status", map.get("status")==null?"":Status.getName(ParseNumber.toInteger(map.get("status").toString())));
				map.put("compType", map.get("compType")==null?"":ConstantsUtil.compType(map.get("compType").toString()));
			}
		}
		return page;
	}
	/**
	 * 
	 *@category 获取中标药品数据列表
	 *@author 邱磊
	 *@date 2015年9月7日 下午1:50:50
	 *@return
	 */
	public Pagination getBindDrugsDataList(Pagination page){
		return bidProjectDao.getBindDrugsDataList(page);
	}

	/**
	 * 
	 *@category 获取投标药品数
	 *@author 应晓川
	 *@date 2015年9月14日20:00:46
	 *@return
	 */
	@Override
	public Pagination getProjDrugList(Pagination page) {
		return bidProjectDao.getProjDrugList(page);
	}
	
	/**
	 * @category 查询不重复的项目
	 * @author 韩守松
	 * @date   2015年9月15日
	 * @param  @param page
	 * @param  @return
	 */
	public  Pagination getDataProjList(Pagination page){
		 return bidProjectDao.getDataProjList(page);
	 }

	/**
	 *@category 获取项目切换数据
	 *@author 应晓川
	 *@date 2015年9月15日10:42:53
	 *@return
	 */
	@Override
	public Pagination getChangeBidProjectList(Pagination page) {
		return bidProjectDao.getChangeBidProjectList(page);
	}
	
	/**
	 * 
	 * @category 根据id获取药品数
	 * @author wangbing
	 * @date 2015年6月11日 上午10:33:20
	 * @param page
	 * @return
	 */
	@Override
	public Map<String,String> getDrugCountById(String id) {
		return bidProjectDao.getDrugCountById(id);
	}

	
	@Override
	public Pagination getDrugCount(Pagination page) {
		return bidProjectDao.getDrugCount(page);
	}


	@Override
	public List<Object> getSelectProjList() {
		return bidProjectDao.getSelectProjList();
	}
	
	/**
	  * @category 根据项目id查询项目信息及项目招标时间
	  * @author 韩守松
	  * @date   2015年11月5日
	  * @param  @param projId
	  * @param  @return
	 * @throws ParseException 
	  */
	 public BidProject getBidProjectAndTimeById(String projId) throws ParseException{
		 return bidProjectDao.getBidProjectAndTimeById(projId);
	 }
	 
	 /**
		 * @category 分院采购情况查看  获取项目列表
		 * @author wangbing
		 * @date   2015年7月15日
		 * @param  @return
		 */
		@SuppressWarnings("unchecked")
		@Override
		public Pagination getChildHospProjectList(Pagination page){
			List<Map<String,Object>> list = (List<Map<String, Object>>) bidProjectDao.getChildHospProjectList(page).getRows();
			for(Map<String,Object> map : list){
				Object projCat = map.get("projCat");
				Object status = map.get("status");
				map.put("projCat", projCat==null?"":StringUtils.isBlank(projCat.toString())?"":ProjcetType.getName(Integer.parseInt(projCat.toString())));
				map.put("starttime", DateUtil.date((Timestamp)map.get("starttime")));
				map.put("endtime", DateUtil.date((Timestamp)map.get("endtime")));
				map.put("status", status==null?"":"1".equals(status.toString())?"启用":"停用");
			}
			page.setRows(list);
			return page;
		}
		
		/**
		 * @category 分院采购情况查看  获取药品列表
		 * @author wangbing
		 * @date   2015年7月15日
		 * @param  @return
		 */
		@Override
		public Pagination getChildHospDrugList(Pagination page){
			return bidProjectDao.getChildHospDrugList(page);
		}
		
		/**
		 * @category 分院采购情况查看  获取分院列表
		 * @author wangbing
		 * @date   2015年7月15日
		 * @param  @return
		 */
		@Override
		public Pagination getChildHospList(Pagination page){
			return bidProjectDao.getChildHospList(page);
		}
		/***************************************************************************/
		/**
		 * 
		 *@category 启用，停用
		 *@author 邱磊
		 *@date 2015年6月24日 上午9:51:30
		 *@param projId
		 *@param status
		 */
		public void switchPurStatus(BidProject data){
			bidProjectDao.switchStatus(data);
		}
		/**
		 * @category 采购项目新增、修改
		 * @author 张俊
		 * @date   2015-06-1
		 * @param bidProject：采购项目
		 * @return 
		 */
		@Override
		public void saveOrUpdateBidProject(BidProject bidProject) {
			bidProject.setStarttime(ParseDate.fromFullFormat(ParseDate.parseShortFormat(bidProject.getStarttime()) + " " + ParseDate.parseShortFormatsHHmmSS(new Date())));
			bidProject.setEndtime(ParseDate.fromFullFormat(ParseDate.parseShortFormat(bidProject.getEndtime())+" "+ ParseDate.parseShortFormatsHHmmSS(new Date())));
			bidProject.setPlanStartDatetime(ParseDate.fromFullFormat(ParseDate.parseShortFormat(bidProject.getPlanStartDatetime()) + " " + ParseDate.parseShortFormatsHHmmSS(new Date()) ));
			bidProject.setPlanEndDatetime(ParseDate.fromFullFormat(ParseDate.parseShortFormat(bidProject.getPlanEndDatetime()) + " " + ParseDate.parseShortFormatsHHmmSS(new Date())));
			bidProjectDao.saveOrUpdateBidProject(bidProject);
		}
		@Transactional
		public void batchAddPurHosp(List<BidProjhospital> list){
			BidProject bp = bidProjectDao.getBidProjectById(list.get(0).getProjId());
			bidProjectDao.batchAddPurHosp(list,bp);
		}
		@Override
		public String getProjRangeById(String projId) {
			if(StringUtils.isNotBlank(projId)){
				return	bidProjectDao.getProjRangeById(projId);
			}
			return null;
			
		} 
		/**
		 * 
		 *@category 获取医疗机构信息列表，排除已在项目中的
		 *@author 邱磊
		 *@date 2015年6月11日 上午11:51:49
		 *@param page
		 *@return
		 */
		
		public Pagination getHospList(Pagination page){
			page = bidProjectDao.getHospList(page);
			return page;
		}
		/**
		 * @category 1.保存项目信息 
		 * 			 2.建立项目跟医疗机构的关联 	bid_projhospital
		 * 			 3.建立项目跟配送企业的关联	bid_projcompany
		 * @author 应晓川
		 * @date   2015年11月11日10:57:11
		 * @param  @return
		 */
		@Transactional
		public void loadToProjInfo(BidProject bidProject) {
			bidProjectDao.addBidProjInfo(bidProject);
			bidProjectDao.loadBidProjhospital(bidProject);
			bidProjectDao.loadBidProjcompany(bidProject);
		}
		/**
		 * 
			 * 
			 *@category 
			 *@author 邱磊
			 *@date 2015年11月10日 上午11:50:48
			 *@param 
			 *@return void
		 * @throws FileNotFoundException 
		 */
		public void bathImport(String fileId){
			SysImportFileInfo info = sfmanager.getImportFileById(fileId);
			FileInputStream fileInputStream = null;
			FileOutputStream os = null;
			try {
				sfmanager.updateImportFileStatus(Constants.WENJIAN_STATUS_JIAOYANZHONG, info.getId());
				fileInputStream = new FileInputStream(new File(uploadPath + importDrugPath + info.getFileName()));
				List<Map<String, String>> list = ExcelUtil.readExcelFile(fileInputStream,info.getFileName(), 0);//读取excel里所有的内容
				List<Map<String, String>> resultList = new ArrayList<Map<String, String>>();
				boolean errorFlag = false;//是否有验证不通过标识，true表示有校验不通过的数据
				if (null == list || list.size() < 2){
					sfmanager.updateImportFileStatus(Constants.WENJIAN_STATUS_JIAOYANBUTONGGUO, info.getId());
				} else {
					for (int i = 1; i < list.size(); i++){
						Map<String, String> map = list.get(i);
						String drugName = map.get("1");
						String formName = map.get("2");
						String specName = map.get("3");
						String factor = map.get("4");
						String unit = map.get("5");
						String materil = map.get("6");
						String compName = map.get("7");
						String drugCode = "";
						String compCode = "";
						StringBuffer msg = new StringBuffer("");
						/************根据通用名，剂型，规格验证品规存不存在开始********************/
						List<Map<String, Object>> list1 = stdqulityManager.getQualityspec(drugName, formName, specName);
						if (null != list1 && list1.size() > 0){
							Map<String, Object> map1 = list1.get(0);
							String qualityspecId = map1.get("qualityspec_id").toString();
							if (map1.get("status") == null || !"1".equals(map1.get("status").toString())){
								msg.append("药品品规状态无效，");
							}
							List<Map<String, Object>> list6 = bidProjectDao.getProddruginfo(qualityspecId, factor, unit, materil, compName);
							if (null != list6 && list6.size() > 0){
								Map<String, Object> map2 = list6.get(0);
								if (map2.get("status") == null || !"1".equals(map2.get("status").toString())){
									msg.append("药品状态无效，");
								} else {
									drugCode = map2.get("drug_code").toString();
									compCode = map2.get("comp_code").toString();
									List<?> pdlist = bidProjectDao.getHaveImportDrug(info.getProjId(), drugCode,compCode,fileId);
									if (null != pdlist && pdlist.size() > 0){
										msg.append("药品在项目中已存在，");
									} else {
										List<?> wpdlist = bidProjectDao.getWaitImportDrug(info.getProjId(), drugCode,compCode,fileId);
										if (null != wpdlist && wpdlist.size() > 0){
											msg.append("药品在导入文件中重复，");
										}
									}
								}
								
							} else {
								msg.append("产品库中不存在该药品，");
							}
						} else {
							msg.append("药品品规不存在，");
						}
						map.put(String.valueOf(list.get(0).size() + 1), msg.substring(0, msg.length() == 0 ? 0 : msg.length() - 1));
						resultList.add(map);
						if (StringUtils.isBlank(msg.toString())){
							Map<String, String> param = new HashMap<String, String>();
							param.put("proj_id", info.getProjId());
							param.put("file_id", fileId);
							param.put("drug_code", drugCode);
							param.put("user", info.getUpdUser());
							param.put("comp_code", compCode);
							bidProjectDao.addImportData(param);
						} else {
							errorFlag = true;
						}
					}
				}
				os = new FileOutputStream(uploadPath + importDrugResultPath + info.getFileName() );
				Pagination page = new Pagination();
				String[] header = null;
				String[] alias = null;
				if (null != list && list.size() > 0){
					Map<String, String> head = list.get(0);
					header = new String[head.size()+1];
					alias = new String[head.size()+1];
					for (int i = 0; i < head.size(); i++){
						header[i] = head.get(String.valueOf(i+1));
						alias[i] = String.valueOf(i+1);
					}
					header[head.size()] = "校验信息";
					alias[head.size()] = String.valueOf(head.size()+1);
					if (null == resultList || resultList.size() < 1){
						Map<String, String> nmap = new HashMap<String, String>();
						for (int i = 0; i < head.size(); i++){
							nmap.put(String.valueOf(i+1), "");
						}
						nmap.put(String.valueOf(head.size()+1), "文件内容为空");
						resultList.add(nmap);
						errorFlag = true;
					}
				} else {
					header = new String[]{"校验信息"};
					alias = new String[]{"1"};
					Map<String, String> nmap = new HashMap<String, String>();
					nmap.put("1", "文件内容为空");
					resultList.add(nmap);
					errorFlag = true;
				}
				
				page.setRows(resultList);
				ExcelUtil.exportExcel(page, os, "校验结果", header, alias);
				if (errorFlag){
					sfmanager.updateImportFileStatus(Constants.WENJIAN_STATUS_JIAOYANBUTONGGUO, fileId);
				} else {
					sfmanager.updateImportFileStatus(Constants.WENJIAN_STATUS_JIAOYANTONGGUO, fileId);
				}
			} catch (Exception e) {
				e.printStackTrace();
				logger.error("药品上传文件校验：", e);
				sfmanager.updateImportFileStatus(Constants.WENJIAN_STATUS_JIAOYANYICHANG, fileId);
				bidProjectDao.deleteByFileId(fileId);
			} finally {
				if (null != fileInputStream){
					try {
						fileInputStream.close();
					} catch (Exception e) {
						logger.error("文件导入异常", e);
					}
				}
				if (null != os){
					try {
						os.close();
					} catch (Exception e) {
						logger.error("文件导入异常", e);					}
				}
			}
		}
		/**
		 * 
		 *@category 上传药品导入文件
		 *@author 邱磊
		 *@date 2015年11月13日 下午1:44:50
		 *@param
		 */
		@Transactional
		public FileUploadResult uploadFile(MultipartFile drugFile,Pagination page){
			SysUser user = (SysUser) page.getForm();
			String fileRealname = drugFile.getOriginalFilename();
			String fileUploadname = String.valueOf(ParseDate.parseWithNum(new Date())) + fileRealname.substring(fileRealname.lastIndexOf("."), fileRealname.length());
			FileUploadResult result = new FileUploadResult();
				try {
					FileUtils.copyInputStreamToFile(drugFile.getInputStream(), new File(uploadPath + importDrugPath, fileUploadname));
				} catch (Exception e) {
					logger.error("文件上传失败：", e);
					result.setResult("文件上传失败！");
					return result;
				}
				File file=new File(uploadPath + importDrugResultPath);    
				if(!file.exists())    
				{    
				    try {    
				    	 file.mkdirs();   
				    } catch (Exception e) {
				        logger.error("创建导入结果文件夹失败", e);
				        result.setResult("创建导入结果文件夹失败!");
				        return result;
				    }    
				}    
				SysImportFileInfoForm info = new SysImportFileInfoForm();
				info.setId(UUID.randomUUID().toString());
				info.setFileName(fileUploadname);
				info.setFileOrginalName(fileRealname);
				info.setProjId(page.getConditions().get("projId"));
				info.setFileType(Constants.WENJIAN_SHANGCHUAN_YAOPING_DAORU);
				info.setUserId(user.getId());
				info.setUploadDatetime(new Date());
				info.setFilePath(importDrugPath);
				info.setCheckFilePath(importDrugResultPath);
				info.setUpdUser(user.getId());
				sfmanager.addImportFile(info);
				result.setFileId(info.getId());
				result.setResult("上传成功，后台正在执行药品导入，请稍后查看导入结果！");
				return result;
		}
		
		/**
		 * 
		 *@category 获取药品导入文件列表
		 *@author 邱磊
		 *@date 2015年11月11日 下午6:37:35
		 *@param
		 */
		public Pagination getImportFileDataList(Pagination page){
			page = sfmanager.getImportFileDataList(page);
			return page;
		}
		/**
		 * 
		 *@category 获取预览列表
		 *@author 邱磊
		 *@date 2015年11月12日 上午8:32:59
		 *@param
		 */
		public Pagination getImportDrugView(Pagination page){
			page = bidProjectDao.getImportDrugView(page);
			return page;
		}
		public int importDrug(String fileId){
			return bidProjectDao.importDrug(fileId);
		}
		public void deleteImportDrug(String fileId){
			bidProjectDao.deleteImportDrug(fileId);
			sfmanager.updateImportFileStatus(Constants.WENJIAN_STATUS_FANGQIDAORU, fileId);
		}
		@Override
		public Pagination getAddedBidProjectHospList(Pagination page) {
			return bidProjectDao.getAddedBidProjectHospList(page);
		}
		@Override
		public boolean updateHospStatus(BidProjhospital bidProjhospital,
				Short status) {
			return bidProjectDao.updateHospStatus(bidProjhospital,status);
		}
		public Map<String, Object> getProjInfoById(String projId){
			List<Map<String, Object>> list = bidProjectDao.getProjInfoById(projId);
			if (null != list && list.size() > 0){
				return list.get(0);
			}
			return null;
		}
		/**
			 * 
			 *@category 根据项目ID与品规Id查询采购项目药品
			 *@author 邱磊
			 *@date 2015年11月11日 上午11:13:29
			 *@param 
			 *@return List<?>
		 */
		public List<?> getPorjDrug(String projId,String drugCode){
			return bidProjectDao.getPorjDrug(projId, drugCode);
		}
		public List<Map<String, Object>> getProjByName(String projName){
			return bidProjectDao.getProjByName(projName);
		}
		public BidProjectDetails getProjDetail(String projId){
			return bidProjectDao.getProjDetail(projId);
		}
		public Pagination checkReImport(Pagination page){
			List<Map<String, Object>> list = bidProjectDao.checkReImport(page);
			if (null != list && list.size() > 0){
				Map<String, Object> map = list.get(0);
				if (ParseNumber.toLong(map.get("drugCount").toString()) > 0) {
					page.setMsg("本次导入的" + map.get("importCount").toString() + "条药品中有" + map.get("drugCount").toString() + "条已存在项目中，是否确定导入！");
				}
			}
			return page;
		}
}
